﻿/*************************************************************************************

- CLR版本：        4.0.30319.42000
- 类 名 称：       ToolIOMonitor
- 机器名称：       YTE
- 命名空间：       LD.Tool.BC
- 文 件 名：       ToolIOMonitor
- 创建时间：       2022/7/28 8:59:49
- 作    者：       YTE
- 说   明：
- 修改时间：
- 修 改 人：
  *************************************************************************************/

using LD.BC;
using LD.Host;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Windows.Documents;

namespace LD.Tool
{
    [Tool(FrmParam = "ToolIOMonitorByNotityFrm", Text = "自动模式", ToolType = ToolEnum.BC)]
    class ToolIOMonitorByNotity : BaseTool
    {
        public override OpResult Execute(TB_Tool model)
        {
            stopwatch.Start();
            isSuccess = false;
            try
            {
                var param = Newtonsoft.Json.JsonConvert.DeserializeObject<IoMonitor>(model.Param);
                if (param != null)
                {
                    PubSub.Hub.Default.Subscribe(Monitor(param));
                    isSuccess = true;
                }
            }
            catch (Exception ex)
            {
                isSuccess = false;
                message = ex.Message;
                Log(model, message, LogLevel.严重);
            }
            finally
            {
                stopwatch.Stop();
            }
            return new OpResult() { IsSuccess = isSuccess, Message = message, ExecuteTime = stopwatch.ElapsedMilliseconds };
        }

        private Action<MonitorModel> Monitor(IoMonitor param)
        {
            Action<MonitorModel> result = new Action<MonitorModel>((data) =>
            {

                int low_hig = -1;
                if (param.IoType == (int)IoType.输入 && data.DI.Count > 0)
                {
                    low_hig = data.DI[param.No];
                }
                else if (param.IoType == (int)IoType.输出 && data.DO.Count > 0)
                {
                    low_hig = data.DO[param.No];
                }
                if (low_hig == 0)
                {
                    //自动模式
                    Appbus.StateEnum = StateEnum.自动模式;
                }
                else { low_hig = 1; }
                {
                    //手动模式
                    Appbus.StateEnum = StateEnum.手动模式;
                }
            });
            return result;
        }
    }
}
